package com.dms.modules.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dms.modules.user.entity.UserFavorite;
import com.dms.modules.product.entity.Product;
import com.dms.modules.merchant.entity.Merchant;

import java.util.List;

/**
 * 用户收藏服务接口
 */
public interface UserFavoriteService extends IService<UserFavorite> {
    
    /**
     * 获取用户的收藏列表
     * @param type 收藏类型：1-商品，2-店铺
     * @param limit 限制数量
     * @return 收藏列表
     */
    List<UserFavorite> getByUserId(Integer type, Integer limit);
    
    /**
     * 添加收藏
     * @param type 收藏类型：1-商品，2-店铺
     * @param targetId 目标ID
     * @return 是否成功
     */
    boolean addFavorite(Integer type, Long targetId);
    
    /**
     * 取消收藏
     * @param type 收藏类型：1-商品，2-店铺
     * @param targetId 目标ID
     * @return 是否成功
     */
    boolean removeFavorite(Integer type, Long targetId);
    
    /**
     * 检查是否已收藏
     * @param type 收藏类型：1-商品，2-店铺
     * @param targetId 目标ID
     * @return 是否已收藏
     */
    boolean isFavorite(Integer type, Long targetId);
    
    /**
     * 获取收藏的商品列表
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 商品分页列表
     */
    IPage<Product> getFavoriteProducts(Integer pageNum, Integer pageSize);
    
    /**
     * 获取收藏的店铺列表
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 店铺分页列表
     */
    IPage<Merchant> getFavoriteMerchants(Integer pageNum, Integer pageSize);
    
    /**
     * 获取收藏数量
     * @param targetId 目标ID
     * @param type 收藏类型：1-商品，2-店铺
     * @return 收藏数量
     */
    long getFavoriteCount(Long targetId, Integer type);
} 